/*
 * Record2.cpp
 *
 *  Created on: Oct 5, 2012
 *      Author: romina
 */

#include "RecordTermino.h"

RecordTermino::RecordTermino(){
	this->id = 0;
	this->termino = "";
	this->transformada = false;
	this->zero = 0;
	this->id_termino = "";
	this->id_lista = 0;
}

RecordTermino::RecordTermino(unsigned int id, string termino){
	this->id = id;
	this->id_lista = 0;
	this->termino = termino;
	this->transformada = false;
	this->zero = 0;
	this->id_termino = termino;
}

RecordTermino::RecordTermino(string id_termino){
	this->id = 0;
	this->id_lista = 0;
	this->id_termino = id_termino;
	this->termino = id_termino;
	this->transformada = false;
	this->zero = 0;
}

string RecordTermino::getId_Termino(){
	return this->id_termino;
}

string RecordTermino::getTermino(){
	return this->termino;
}

int RecordTermino::getTamanio() const{
	return (sizeof(int) + this->termino.length() + sizeof(unsigned int) + sizeof(int));
}

bool RecordTermino::getTransformada() const{
	return this->transformada;
}

int RecordTermino::getZero() const{
	return this->zero;
}

void RecordTermino::setTransformada(bool valor){
	this->transformada = valor;
}

void RecordTermino::setIdLista(unsigned int valor){
	this->id_lista = valor;
}

unsigned int RecordTermino::getId() const{
	return this->id;
}


int RecordTermino::compare(RecordTermino rec){
	return this->id_termino.compare(rec.id_termino);
}

void RecordTermino::serializar(char * buffer, unsigned int &offset){
	PersistorARBOL::transformar_cadena_en_char(buffer, offset, (char*)this->termino.c_str());
	PersistorARBOL::transformar_entero_en_char(buffer, offset, this->id);
	PersistorARBOL::transformar_booleano_en_char(buffer, offset, this->transformada);
	PersistorARBOL::transformar_entero_en_char(buffer, offset, this->zero);
}

void RecordTermino::deserializar(char * buffer, unsigned int &offset){
	this->termino = PersistorARBOL::obtener_cadena_desde_Buffer(buffer, offset);
	this->id =PersistorARBOL::obtener_entero_desde_Buffer(buffer,offset);
	this->transformada =PersistorARBOL::obtener_booleano_desde_Buffer(buffer,offset);
	this->zero = PersistorARBOL::obtener_entero_desde_Buffer(buffer,offset);
}

void RecordTermino::transformarAFrontCoding(string primera, string ruta){
	if (this->transformada == false){
		FrontCoding* fc = new FrontCoding(ruta);
		string modificada = fc->establecerFrontCoding(primera, this->termino);
		this->termino = modificada;
		this->transformada = true;
		modificada.clear();
		delete fc;
	}
}

void RecordTermino::sacarElFrontCoding(string palabra, string ruta){
	if (this->transformada == true){
		FrontCoding* fc = new FrontCoding(ruta);
		string modificada = fc->interpretarFrontCoding(palabra);
		this->termino = modificada;
		this->transformada = false;
		modificada.clear();
		delete fc;
	}
}

void RecordTermino::show(){
	cout<<  "(" << this->termino << ",";
	cout<<  this->id << ",";
	cout<<  this->zero << ")" << endl;
}

string RecordTermino::toString(){
	string registro = "";
	registro.append("(" + this->termino + ",");
	registro.append(Palabra::intToString(this->id) + ",");
	registro.append(Palabra::intToString(this->zero) + ")");
	return registro;
}

RecordTermino::~RecordTermino(){
}

